perm filename NORMAL.SAI[PIC,HE] blob
sn#430341 filedate 1979-04-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ENTRY NORMAL
C00005 ENDMK
C⊗;
ENTRY NORMAL;
BEGIN "NORMAL"
REQUIRE "36A" COMPILER!SWITCHES;
REQUIRE "BUFDEC.SAI" SOURCE!FILE;
INTERNAL INTEGER PROCEDURE NORMAL(INTEGER BUF,NBYTSZ,MINB,MAXB);
BEGIN "NORMP"
INTEGER I,J,ISTOP,JSTOP,POUTH,PICNOW,NBUF,P1,P2,TOPVAL;
INTEGER MINBP1,OBYTE;
REAL RPOUTH;
COMMENT CHECK THAT THE RANGE IS GREATER THAN ZERO...VERY IMPORTANT;
IF MAXB=MINB THEN
BEGIN
OUTSTR("NORMAL: ARRGH! ZERO RANGE GIVEN CAN'T DO IT"&CRLF);
RETURN(BUF);
END
ELSE
BEGIN "NORM"
ISTOP←ROWS(BUF);
JSTOP←COLMS(BUF);
OBYTE←2↑BYTSZ(BUF)-1;
NBUF←FNDBUF; COMMENT GET A FREE BUFFER FOR THE OUTPUT PICTURE;
GETBUF(ISTOP,JSTOP,NBYTSZ,NBUF);
PUTSUB(ISUBST(BUF),JSUBST(BUF),NBUF);
TOPVAL←2↑NBYTSZ; COMMENT 2↑NBYTSZ IS THE MAXIMUM RANGE OF THE NEW PICTURE;
MINBP1←MINB+1;
RPOUTH←TOPVAL/(MAXB-MINBP1);
TOPVAL←TOPVAL-1;
BEGIN "ARRALLOC"
SAFE INTEGER ARRAY FCNARR[0:OBYTE];
FOR I←0 STEP 1 UNTIL OBYTE DO COMMENT THE LINEAR FCN NORMALIZE;
FCNARR[I]←((RPOUTH*(I-MINBP1)) MIN TOPVAL) MAX 0;
FOR I←1 THRU ISTOP DO COMMENT PERFORM THE NORMALIZING OPERATION;
BEGIN
P1←INPTR(I,1,BUF);
P2←OUTPTR(I,1,NBUF);
FOR J←1 THRU JSTOP DO
BEGIN
IFC FALSE THENC
PICNOW ← ILDB(P1);
COMMENT NORMALIZE IT CONVERT TO OUTPUT RANGE;
IF PICNOW≥MAXB THEN POUTH←TOPVAL
ELSE IF PICNOW≤MINB THEN POUTH←0
ELSE POUTH←((RPOUTH*(PICNOW-MINBP1)) min (TOPVAL)) max 0;
COMMENT THIS HAS BEENREPLACED BY THE FCN ARRAY COMPUTATION ABOVE;
ENDC
IDPB(FCNARR[ILDB(P1)],P2);
END ;
ROWCHK(CHKROW,ROWS,I,50);
END ;
END "ARRALLOC";
RETURN(NBUF);
END "NORM";
END "NORMP";
END "NORMAL";